﻿




	using System.Collections.Generic;
    using System;
	using System.Linq;    
    using System.Data;        
	using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;
using DeklaritModel;

namespace WebSilverlight.Web
{
	[EnableClientAccess()]    
    public partial class CiudadDomainService : DomainService
    { 
		#region Properties						
		protected DeklaritModel.CiudadDataSet ContextDataSet;
		// Setear Property (global o anivel de entidad o ambas?)
		const int PageSize = 6;
        
        public virtual ICiudadDataAdapter DataAdapter 
        {
            get 
            {
				if(DataAdapterFactory.Provider == null) //return null;
					DataAdapterFactory.Provider = new SimpleDataAdapterFactory();

                return DataAdapterFactory.GetCiudadDataAdapter(); 
            }
        }
		
		#endregion
        
        private void FillCiudadDataSet(DeklaritModel.CiudadDataSet dsCiudadDataSet1, int page, Int16? PaisId, Int16? CiudadId , Int16? fkPaisId)
        {   
            if (PaisId.HasValue && CiudadId.HasValue )
            {   
				DataAdapter.Fill(dsCiudadDataSet1, PaisId.Value, CiudadId.Value);                            
            }
            else
            {
			    if(fkPaisId.HasValue)
				{
					if (page == -1)
						DataAdapter.FillByPaisId(dsCiudadDataSet1, fkPaisId.Value);
                    else DataAdapter.FillPageByPaisId(dsCiudadDataSet1, fkPaisId.Value, (page - 1) * PageSize, PageSize);
				}
				else				
					if (page == -1)
						DataAdapter.Fill(dsCiudadDataSet1);
					else DataAdapter.FillPage(dsCiudadDataSet1, (page-1) * PageSize, PageSize);				
            }      
        } 
        private IQueryable<CiudadWrapper> GetPage(int pageNumber, Int16? fkPaisId)
        {
            ContextDataSet = new DeklaritModel.CiudadDataSet();
            FillCiudadDataSet(ContextDataSet, pageNumber, null, null , fkPaisId);

            EnumerableRowCollection<DataRow> dr = ContextDataSet.Ciudad.AsEnumerable();
            
			IEnumerable<CiudadWrapper> query = from row in            
                            dr
                        select new CiudadWrapper
                        {
							PaisId = row.Field<Int16>("PaisId"),
							PaisNombre = row.Field<string>("PaisNombre"),
							PaisMoneda = row.Field<string>("PaisMoneda"),
							CiudadId = row.Field<Int16>("CiudadId"),
							CiudadNombre = row.Field<string>("CiudadNombre"),
                        };            
            IQueryable<CiudadWrapper> iq = query.AsQueryable();            
            return iq;            
        } 
                       
        public IQueryable<CiudadWrapper> GetCiudadPage(int pageNumber)
        {
            return GetPage(pageNumber , null);
        }       
		public IQueryable<CiudadWrapper> GetCiudad()
        {
            return GetPage(-1 , null);
        }
        public IQueryable<CiudadWrapper> GetCiudadByPaisId(Int16 PaisId)
        {            
            return GetPage(-1, PaisId);
        }  
        private void GetCiudad(Int16? PaisId, Int16? CiudadId)
        {
			ContextDataSet = new DeklaritModel.CiudadDataSet();
            FillCiudadDataSet(ContextDataSet, -1, PaisId.Value, CiudadId.Value, null);
        }
		public void UpdateCiudad(CiudadWrapper current)        
        {			
			GetCiudad(current.PaisId, current.CiudadId);

            DataRow updateRow = null;
            foreach (DataRow row in ContextDataSet.Ciudad.Rows)
            {
                updateRow = row;                
                break;
            }

            //var Changes = this.ChangeSet.GetOriginal(current);
			//if (Changes.PaisId != current.PaisId)
                updateRow.SetField("PaisId", current.PaisId);							
			//if (Changes.PaisNombre != current.PaisNombre)
                updateRow.SetField("PaisNombre", current.PaisNombre);							
			//if (Changes.PaisMoneda != current.PaisMoneda)
                updateRow.SetField("PaisMoneda", current.PaisMoneda);							
			//if (Changes.CiudadId != current.CiudadId)
                updateRow.SetField("CiudadId", current.CiudadId);							
			//if (Changes.CiudadNombre != current.CiudadNombre)
                updateRow.SetField("CiudadNombre", current.CiudadNombre);							
			DataAdapter.Update(ContextDataSet);    
        }        
        public void InsertCiudad(CiudadWrapper newObj)        
        {			
			DeklaritModel.CiudadDataSet  dsCiudadDataSet1 = new DeklaritModel.CiudadDataSet();            
			CiudadDataSet.CiudadRow row = dsCiudadDataSet1.Ciudad.NewCiudadRow();
			row.PaisId  = newObj.PaisId;
			row.PaisNombre  = newObj.PaisNombre;
			row.PaisMoneda  = newObj.PaisMoneda;
			row.CiudadId  = newObj.CiudadId;
			row.CiudadNombre  = newObj.CiudadNombre;
            dsCiudadDataSet1.Ciudad.AddCiudadRow(row);
            DataAdapter.Update(dsCiudadDataSet1);             
        }
        public void DeleteCiudad(CiudadWrapper delObj)        
        {			
			DeklaritModel.CiudadDataSet  dsCiudadDataSet1 = new DeklaritModel.CiudadDataSet();            
			CiudadDataSet.CiudadRow row = dsCiudadDataSet1.Ciudad.NewCiudadRow();
			row.PaisId  = delObj.PaisId;
			row.PaisNombre  = delObj.PaisNombre;
			row.PaisMoneda  = delObj.PaisMoneda;
			row.CiudadId  = delObj.CiudadId;
			row.CiudadNombre  = delObj.CiudadNombre;
            dsCiudadDataSet1.Ciudad.RemoveCiudadRow(row);
            DataAdapter.Update(dsCiudadDataSet1);             
        }
        [Invoke]
        public int ItemCount()
        {            
            return DataAdapter.GetRecordCount();
        }
	}
}